package com.kk.enums;

import com.baomidou.mybatisplus.annotation.EnumValue;
import com.fasterxml.jackson.annotation.JsonValue;
import lombok.AllArgsConstructor;
import lombok.Getter;
import lombok.NoArgsConstructor;

import java.util.Arrays;
import java.util.Map;
import java.util.function.Function;
import java.util.stream.Collectors;

/**
 * @author kl
 * @version 1.0
 * @description: 用户状态枚举
 * @date 2025/10/16 下午4:56
 */
@Getter
public enum StatusEnum implements BaseEnum<Integer> {

    // ✅ 1. 枚举实例必须放在最前面
    /**
     * 禁用
     */
    DISABLED(0, "禁用"),

    /**
     * 启用
     */
    ENABLED(1, "启用");
    // ↑ 注意：最后一个枚举实例用分号结束

    /**
     * 状态值（存储到数据库）
     */
    @EnumValue  // ← 不要忘记这个注解
    @JsonValue  // ← 不要忘记这个注解
    private final Integer value;

    /**
     * 状态描述
     */
    private final String label;


    StatusEnum(Integer value, String label) {
        this.value = value;
        this.label = label;
    }

    private static final Map<Integer, StatusEnum> VALUE_MAP =
            Arrays.stream(values())
                    .collect(Collectors.toMap(StatusEnum::getValue, Function.identity()));

    /**
     * 根据 value 获取枚举
     */
    public static StatusEnum of(Integer value) {
        return VALUE_MAP.get(value);
    }

    /**
     * 根据 value 获取枚举（带默认值）
     */
    public static StatusEnum of(Integer value, StatusEnum defaultEnum) {
        return VALUE_MAP.getOrDefault(value, defaultEnum);
    }

    /**
     * 判断是否为启用状态
     */
    public boolean isEnabled() {
        return this == ENABLED;
    }

    /**
     * 判断是否为禁用状态
     */
    public boolean isDisabled() {
        return this == DISABLED;
    }
}